﻿using System;
using System.Collections.Generic;
using BehaviorModel.Block;
using BehaviorModel.Block.Generator;
using BehaviorModel.Block.ServiceChannel;

namespace BehaviorModel
{
    /// <summary>
    /// Describe block controller. 
    /// Used to manage blocks in QSM.
    /// </summary>
    public interface IBlockController
    {
        IBlock this[Guid id] { get; }

        void AddBlock(IBlock block);

        void RemoveBlock(IBlock block);

        void ClearBlocks();

        void Connect(ISenderBlock senderBlock, IReceiverBlock receiverBlock);

        void Disconnect(ISenderBlock senderBlock, IReceiverBlock receiverBlock);

        void InitBlocks();

        void UpdateBlocks();

        List<IServiceChannel> GetServiceChannels();

        List<IGenerator> GetGenerators();
    }
}
